<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div style="color: red">for in 遍历会把对象原型链上的属性也遍历出来</div>
  <h4>拷贝继承</h4>
  <h5>特点：</h5>
  <ul>
    <li>1、支持多继承</li>
  </ul>

  <h5>缺点：</h5>
  <ul>
    <li>1、效率较低，内存占用高（因为要拷贝父类的属性）</li>
    <li>2、无法获取父类不可枚举的方法（不可枚举方法，不能使用for in 访问到</li>
  </ul>

  <script>
    // 定义一个动物类
    function Animal(name) {
      // 属性
      this.name = name || 'Animal';
      // 实例方法
      this.sleep = function () {
        console.log(this.name + '正在睡觉！');
      }
    }
    // 原型方法
    Animal.prototype.eat = function (food) {
      console.log(this.name + '正在吃：' + food);
    };



    function Cat(name) {
      var animal = new Animal();
      for (var p in animal) {
        // for in 遍历会把对象原型链上的属性也遍历出来
        Cat.prototype[p] = animal[p];
      }
      this.name = name || '可可';
    }

    // Test Code
    var cat = new Cat();
    console.dir(cat)
    console.log(cat.name);
    console.log(cat.sleep());
    console.log(cat instanceof Animal); // false
    console.log(cat instanceof Cat); // true
  </script>

</body>

</html>